Ik heb een array statsname als appel X banaan Y Kiwi z Ik moet appel, banaan en kiwi in een reeks Vruchten plaatsen en X, Y en Z in een reeks met de naam alfabetten. Een eenvoudig C # -mechanisme ervoor alstublieft?
Gebruik de IEnumerable.Where overload die de index levert. var fruits = statsname.Where ((s, i) => i% 2 == 0) .ToArray (); var alphabets = statsname.Where ((s, i) => i% 2! = 0) .ToArray (); | Gestolen van Hoe alternatieve elementen te krijgen met behulp van Enumerable in C # var fruits = myArray.Where ((t, i) => i% 2 == 0) .ToArray (); var alfabetten = myArray.Where ((t, i) => i% 2 == 1) .ToArray (); | Als ik je vraag goed heb begrepen, is wat je wilt heel eenvoudig: Je wilt fruit in een reeks fruit plaatsen en hetzelfde voor alfabetten en ze verschijnen afwisselend in array statsname, dus: voor (int i = 0, j = 0; i list = new List () {"appel", "X", "banaan", "Y", "Kiwi", "z"}; var result = list.Select ((l, i) => nieuw {l, i}) .GroupBy (p => p.i% 2) .Select (x => x.Select (v => v.l) .ToList ()) .ToList (); Dan heb je een lijst met lijsten: | list fruits = new List (); list alphabet = new List (); voor (int i = 0; i everyOther (IEnumerable collectie) { met (var e = collection.GetEnumerator ()) { while (e.MoveNext ()) { opbrengst rendement e.Current; e.MoveNext (); // sla een over } } } U kunt System.Linq.Skip gebruiken om het eerste element over te slaan. string [] words = "appel X banaan Y Kiwi z" .Split (); var fruits = everyOther (woorden); var alfabetten = everyOther (words.Skip (1)); Gebruik ze gewoon als een nieuwe verzameling of roep .ToArray () of .ToList () erop aan: foreach (string f in fruits) Console.WriteLine (f); string [] anArray = fruits.ToArray (); // met System.Linq Nu heb je wat je nodig hebt. Iteratoren zijn methoden die rendement opleveren, zie Iteratoren (C # Programming Guide). Dit is een zeer sterk kenmerk van de taal. Jij kan: elementen overslaan versier elementen de volgorde wijzigen sequenties samenvoegen (zie System.Linq.Concat) ... | Hier is wat werkende code, hopelijk zal dit je helpen: systeem gebruiken; met behulp van System.Collections.Generic; met behulp van System.IO; met System.Linq; met System.Text; met behulp van System.Threading.Tasks; naamruimte ReadFile { klasse Programma { static void ReadFile (string filePath, List custumerNames, List phoneNumbers) { string line = string.Empty; var fileStream = nieuwe StreamReader (filePath); bool isPhoneNumber = true; while ((line = fileStream.ReadLine ())! = null) { if (isPhoneNumber) { phoneNumbers.Add (Convert.ToInt32 (lijn)); isPhoneNumber = false; } anders { custumerNames.Add (regel); isPhoneNumber = true; } } fileStream.Close (); } static void Main (string [] args) { Console.WriteLine ("Begonnen met het lezen van het bestand ..."); List custumersNamesList = new List (); List custumersPhonesNumbers = new List (); ReadFile ("SampleFile.txt", custumersNamesList, custumersPhonesNumbers); // Ervan uitgaande dat beide lijsten dezelfde lengte hebben. voor (int i = 0; i